<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 科里化 ：curry ：咖喱
        // 科里化 ： 把多元参数转换成一元参数的过程；
        // bind();
        // function fn(a,b){
        //     return a + b;
        // }

        function fn(a){
            console.log(a);
        }

        // fn.bind({name:"12e"})(1);
        fn.bind(null)(1);


        // function add(a,b,c){
        //     return a + b + c;
        // }

        // add(1,2,3);
        // add(1)(2)(3);

        // function curry(add){   // 可以把多元调用 换成一元调用
        //     return function(a){
        //         return function(b){
        //             return function(c){
        //                 return a + b + c;
        //             }
        //         }
        //     }
        // }
        // let myadd = curry(add);
        // console.log(myadd);
        // let res =  myadd(1)(2)(3);
        // console.log(res);



    //     // 任意参数转换成一元参数；

    //     function add(a,b,c,d){
    //         return a + b + c + d;
    //     }
    //     // add();
    //     // 函数的长度就是参数的个数
    //     // console.log(add.length);
    //     // 处理多参数的curry ，不定参数的curry
    //     function curry(add){    
    //         return function curryFn(...args){
    //             if(add.length>args.length){
    //                 // 如果参数不够 就继续返还 函数 ，连接传入的参数 ；
    //                 return function(...args2){
    //                    return curryFn(...args,...args2);
    //                 }
    //             }else{
    //                 // 如果参数已经够了 ，直接执行函数返还函数结果
    //                 return add(...args);
    //             }
    //         }
    //     }

    //     let myadd = curry(add);
    //     console.log(myadd);
    //     // myadd
    //    let res =   myadd(1)(2)(3)(4);
    //    console.log(res);


    </script>
</body>
</html>